package com.crm.sys.service;

import java.util.List;
import java.util.Map;

import com.crm.sys.model.Announcement;
import com.crm.sys.model.CallLog;
import com.crm.sys.model.City;
import com.crm.sys.model.Configure;
import com.crm.sys.model.ConfigureItem;
import com.crm.sys.model.Department;
import com.crm.sys.model.Log;
import com.crm.sys.model.Province;
import com.crm.sys.model.Role;
import com.crm.sys.model.SysMessage;
import com.crm.sys.model.SysTerm;
import com.crm.sys.model.UserHistoryMessage;
import com.crm.util.Pager;

public interface SysService {
	/**
	 * 取得所有省份列表
	 * @return
	 */
	public List<Province> getProvinceList();
	/**
	 * 根据省份Id 取得省份下的城市列表
	 * @param proid
	 * @return
	 */
	public List<City> getCityListByProId(int proid);
	/**
	 * 根据配置编码获取配置信息
	 * @param name
	 * @return
	 */
	public Configure getConfigureByName(String code);
	/**
	 * 获取配置列表
	 * */
	public List<Configure> getConfigureList(int pageNo,int pageSize);
	/**
	 * 获取配置表详情表
	 * */
	public List<ConfigureItem> getConfigureItemList(ConfigureItem ci,int pageNo,int pageSize);
	/**
	 * 获取配置表详情表最大排序号
	 * */
	public Integer getMaxOrderNumber(ConfigureItem ci);
	/**
	 * 添加配置表
	 * */
	public int addConfigure(Configure c);
	/**
	 * 添加配置表详情
	 * */
	public int addConfigureItem(ConfigureItem ci);
	/**
	 *  根据ID查询配置项列表
	 * @param value  配置项值
	 * @param name  配置项名称
	 * @return
	 */
	public  ConfigureItem  getConfigureItemByValue(String value,String code);
	/**
	 * 删除配置表
	 * */
	public int deleteConfigure(Configure c);
	/**
	 * 删除配置表详情
	 * */
	public int deleteConfigureItem(ConfigureItem ci);
	/**
	 * 修改配置表
	 * */
	public int updateConfigure(Configure c);
	/**
	 * 修改配置表详情
	 * */
	public int updateConfigureItem(ConfigureItem ci);
	/**
	 * 取得所有部门
	 * @return
	 */
	public List<Department>  getDepartmentAll();
	
	/**
	 * 取得当前用户下的所有部门
	 * */
	public List<Department> getAllDeptmentByPid(Long pid);
	/**
	 * 取得当前部门下所有子部门id
	 * */
	public List<Long> getAllDeptmentidByPid(Long pid);
	
	/**
	 * 取得部门 
	 * 如果是所有部门就传null
	 * @return
	 */
	public List<Department> getDepartmentListAll(Department d);
	/**
	 * 取得部门详情
	 * @param id
	 * @return
	 */
	public Department getDepartmentById(Long id);
	/**
	 * 添加部门
	 * */
	public int addDepartment(Department d);
	/**
	 * 删除部门
	 * */
	public int deleteDepartment(Long id);
	/**
	 * 修改部门
	 * */
	public int updateDepartment(Department d);
	/**
	 *  角色查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public Pager getRoleList(Role role, int pageNo, int pageSize) ;
	/**
	 *  角色和产品添加
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int saveRole(Role role,String productcategorys);
	/**
	 * 角色修改的ID查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public Role getRoleByid(Long id);
	/**
	 * 角色修改的保存
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int updateRole(Role role,String productcategorys);
	/**
	 *  角色启用和禁用
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int updateRoleState(Long id,int str);
	/**
	 *  资源查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public Pager getSysTermList(SysTerm systerm, int pageNo, int pageSize) ;
	/**
	 *  资源添加
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int insertSysTerm(SysTerm systerm);
	/**
	 *  资源修改的ID查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public SysTerm getSysTermByid(Long id);
	/**
	 * 资源修改的更新
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int updateSysTerm(SysTerm systerm);
	/**
	 *资源绑定查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<SysTerm> getSysTermBound(SysTerm systerm,int rid) ;
	/**
	 *资源绑定保存
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int saveSysTermBound(String rid, String tids);
	/**
	 *系统菜单查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<SysTerm> getMune(Long uid);
	/**
	 * 根据权限查询菜单
	 * @param rid
	 * @return
	 */
	public List<SysTerm> getRoleMenu(Long rid);
	/**
	 *系统菜单拦截器查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<SysTerm> getRoleMune(Long uid,String url);
	/**
	 *  Excel导入时城市关联省级的名称查询
	 * @param res
	 * @return
	 */
	public City getCityContantsProvince(String name);
	/**
	 *  Excel导入时省级详情的名称查询
	 * @param res
	 * @return
	 */
	public Province getProvinceByName(String name);
	
	/**
	 * 获取系统公告
	 * @return
	 */
	public List<Announcement> getAnnouncements();
	
	/**
	 * 客户批量分配
	 * @return
	 */
	public int saveCustomerCreatuserUpdate(String ids, String uid,Long infoid);
	
	public int saveLoginfo(Log log);
	
	/**
	 * 获取log列表（带分页）
	 * */
	public List<Log> getLogList(Log log,int pageNo,int pageSize);
	
	/**
	 * 资源转移转移全部，log记录
	 * 必须要有的数据：
	 * oid是转移给谁的id,
	 * uid是转移谁的id,
	 * 小明的资源转移给小红，小明的id是uid,小红的id是oid,
	 * createuser是操作人的id,
	 * state
	 * */
	public int insertAllTransLog(Log log);
	
	/**
	 * 保存日志信息
	 * @param log
	 * @return
	 */
	public int insertLog(Log log);
	/**
	 * 获取消息
	 * */
	public List<SysMessage> getMessageList(SysMessage ms);
	/**
	 * 获取未读消息条数
	 * @param ms
	 * @return
	 */
	public int getMessageCount(SysMessage ms);
	/**
	 * 获取用户聊天记录
	 * @param ms
	 * @return
	 */
	public  List<UserHistoryMessage> getUserHistoryMessage(UserHistoryMessage ms,int pageNo,int pageSize);
	/**
	 * 新增消息
	 * */
	public int insertMessage(SysMessage ms);
	
	/**
	 * 更新消息状态
	 * */
	public int updateMessageState(SysMessage ms);
	
	/**
	 * 获取category的name
	 * */
	public ConfigureItem getCategoryByid(String value,String code);
	
	/**
	 * 推送客户提醒
	 */
	public void pushRemind();
	
	/**
	 * 推送复制电话次数多的用户提醒
	 * @return
	 */
	public void pushCopyUserToQQ();
	/**
	 * 根据用户id查询客户列表
	 * @return
	 */
	/*public Pager getUserandCustomerList(CustomerInfo info,int pageNo, int pageSize);*/
	/**
	 * 根据用户id查询客户列表
	 * @return
	 *//*
	public List<CustomerInfo> getCustomerList(CustomerInfo info);
	*//**
	 * 客户所有分配
	 * @return
	 *//*
	public int saveCustomerCreatuserUpdateAll(List<CustomerInfo> list, String uid,Long infoid);*/
	
	 /**
	  * 根据关键字 查找呼叫信息信息
	  * @return
	  */
	 public  List<CallLog> getCallLogList(CallLog cinfo, int pageNo, int pageSize);
	 
		
	public int saveCallLog(CallLog cl);
	
	/**
	 * 获取待获取录音的呼叫内容
	 * @return
	 */
	public List<CallLog>  getUpdCallLogList();
	/**
	 * 更新呼叫中心记录
	 * @param cl
	 * @return
	 */
	public int updateCallLog(CallLog cl);
	/**
	 * 更新呼叫日志的通话时间及录音
	 */
	public void updatecallLogTime();
	/**
	 * 获取呼叫统计数据
	 * @param cl
	 * @return
	 */
	public Map<String,Object>  getCallLogData(CallLog cl);
	/**
	 * 获取电话拨打时间用户排行
	 * @return
	 */
	public  List<CallLog>  getTimesUserCallLogList();
}
